package br.gov.dataprev.treinamento.ejb.remote;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.junit.Test;

import br.gov.dataprev.treinamento.ejb.modelo.Endereco;
import br.gov.dataprev.treinamento.ejb.modelo.FormaPagamento;
import br.gov.dataprev.treinamento.ejb.modelo.ItemPedido;
import br.gov.dataprev.treinamento.ejb.modelo.Pedido;
import br.gov.dataprev.treinamento.ejb.modelo.PessoaFisica;
import br.gov.dataprev.treinamento.ejb.modelo.Produto;
import br.gov.dataprev.treinamento.ejb.modelo.Sexo;
import br.gov.dataprev.treinamento.ejb.modelo.SituacaoPedido;
import br.gov.dataprev.treinamento.ejb.service.remote.FreteServiceRemote;

public class RemoteBase {

	public final Object getEJBJboss(String nomeServico) throws NamingException {

		Properties env = new Properties();
		env.put(Context.INITIAL_CONTEXT_FACTORY,
				"org.jboss.naming.remote.client.InitialContextFactory");
		
		env.put(Context.URL_PKG_PREFIXES,
				
				"org.jboss.ejb.client.naming");
		env.put("jboss.naming.client.ejb.context", true);
		env.put(Context.SECURITY_PRINCIPAL, "appleo");
		// password
		env.put(Context.SECURITY_CREDENTIALS, "123");
		env.put(Context.PROVIDER_URL, "remote://localhost:4447"); // remote
																		// machine
		//https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI
		//https://community.jboss.org/message/638692

		
		InitialContext ctx = new InitialContext(env);
		String earName = "Loja";
		String tipoLookup = "remote";
		
		String jndi = earName+"/"+nomeServico+"/"+tipoLookup;
		
		Object ejb = ctx.lookup(nomeServico);
		
		return ejb;

	}

	public final Context getLojaContextOC4J() throws NamingException {

		Properties environment = new Properties();

		environment.put("java.naming.provider.url",	"opmn:ormi://opmnhost:oc4j_inst1/ejbsamples");
		environment.put("java.naming.factory.initial", "com.evermind.server.ApplicationClientInitialContextFactory");
		environment.put(Context.SECURITY_PRINCIPAL, "userejb");
		environment.put(Context.SECURITY_CREDENTIALS, "userejb00");
		Context ic = new InitialContext(environment);

		return ic;

	}
	
	
	public final Context getLojaContextWebLogic() throws NamingException {
		Properties p = new Properties();
		p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
		p.put(Context.PROVIDER_URL, "t3://localhost:8002");
		p.put(Context.SECURITY_PRINCIPAL, "system");
		p.put(Context.SECURITY_CREDENTIALS, "weblogic");
		Context context = new InitialContext(p);
		return context;
	}
	
	@Test
	public void freteTest() throws NamingException {
		
		FreteServiceRemote service = (FreteServiceRemote) getEJBJboss("ejb:LojaEar/LojaEjb-0.0.1-SNAPSHOT//FreteServiceImpl!br.gov.dataprev.treinamento.ejb.service.remote.FreteServiceRemote");
		
		Pedido p = criarPedidoTeste();
		
		BigDecimal frete = service.calcularFrete(p);
		
		System.out.println(frete);
		
		
	}
	
	
	public Pedido criarPedidoTeste() {
		
		PessoaFisica cliente = new PessoaFisica();
		cliente.setCpf("12345678910");
		cliente.setDataCadastro(new Date());
		cliente.setEmail("joao.silva@gmail.com");
		cliente.setNome("JOAO DA SILVA");
		cliente.setSexo(Sexo.MASCULINO);
		
		Endereco endereco = new Endereco();
		endereco.setLogradouro("AV BRASIL");
		endereco.setNumero("171");
		endereco.setComplemento("AP 101");
		endereco.setCep("12345-678");
		endereco.setBairro("DIVINO");
		endereco.setCidade("RIO DE JANEIRO");
		endereco.setUf("SP");
		
	//	cliente.setEndereco(endereco);
		
		Produto p1 = new Produto();
		p1.setNome("Xoom 2 8.2\"");
		p1.setFornecedor("Motorola");
		p1.setDescricao("Tablet Motorola Xoom 2 com Android 3.2 Wi-Fi e 3G Tela 8,2\" Touchscreen e Memória Interna 32GB");
		p1.setDestaque(true);
		p1.setValorUnitario(new BigDecimal(1399.99D));
		p1.setValorPromocao(new BigDecimal(989.1));
		
		Produto p2 = new Produto();
		p2.setNome("Dock multimídia para Tablets Motorola");
		p2.setFornecedor("Motorola");
		p2.setDescricao("Doca Multimídia com 3 saídas USB e 1 saída micro HDMI para Tablets (Xoom 2 Media Edition e Xoom 2) - Motorola");
		p2.setDestaque(true);
		p2.setValorUnitario(new BigDecimal(369D));
		
		
		Pedido pedido = new Pedido();
		pedido.setCliente(cliente);
		pedido.setDataCadastro(new Date());
		pedido.setFormaPagamento(FormaPagamento.CARTAO_MASTER);
		pedido.setSituacao(SituacaoPedido.AGUARDANDO_CONFIRMACAO_PGTO);
		
		ItemPedido ip1 = new ItemPedido();
		ip1.setProduto(p1);
		ip1.setQuantidade(2);
		pedido.addItem(ip1);
		
		ItemPedido ip2 = new ItemPedido();
		ip2.setProduto(p2);
		ip2.setQuantidade(1);
		pedido.addItem(ip2);
		
		return pedido;
	}

}
